有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我需要测试类中的测试方法吗

所以我有一个示例方法,我给他一天,它会返回我一周中的第一天和最后一天,其中一天:

public static final DatePeriod thisWeek(LocalDate date) {

    TemporalField dayOfWeek = WeekFields.of(Locale.FRANCE).dayOfWeek();
    LocalDate mon = date.with(dayOfWeek, 1);
    LocalDate sun = date.with(dayOfWeek, 7);

    return new DatePeriod(mon, sun);
}

我必须编写JUnit测试(我做到了):

@Test
public void testThisMonth_LocalDate() throws ParseException {
    System.out.println("thisMonth");
    for (String[] date : VALID_TEST_DATES) {
        LocalDate dateLocal = dateToLocal(date[0]);
        DatePeriod expResult = new DatePeriod(dateToLocal(date[5]), dateToLocal(date[6]));
        DatePeriod result = JavaTimeUtils.thisMonth(dateLocal);
        assertEquals(expResult.getLeft(), result.getLeft());
        assertEquals(expResult.getRight(), result.getRight());
    }
}

所以,因为我多次使用了dateToLocal()中的代码,所以我决定使用如下方法:

public LocalDate dateToLocal(String dateString) throws ParseException {   // Calendar to LocalDate
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    Calendar cal = Calendar.getInstance();
    Date initDate = df.parse(dateString);
    cal.setTime(initDate);
    LocalDate dateLocal = LocalDate.of(cal.get(Calendar.YEAR), Month.of(cal.get(Calendar.MONTH)+1), cal.get(Calendar.DAY_OF_MONTH));

    return dateLocal;
}

而且很有效。 但这不是我的问题。 我想知道这是做类似事情的正确方法吗(这个JUnit测试中的方法),我是否需要对这个方法进行测试,我是否需要将它转移到其他类中(测试之外)?我知道这是个奇怪的问题,我已经在谷歌上搜索过了,但没有成功。(也许我不能直接问谷歌。)。 谢谢:)


共 (5) 个答案

  1. # 1 楼答案

    你不需要测试测试方法(正如其他人所指出的)。但是,我建议将预期结果存储为LocalDate实例,而不是通过字符串动态创建它们。这样,您就不会受到转换代码中可能存在的错误的影响

  2. # 2 楼答案

    做某事没有绝对的方法,一切都取决于项目

    这个话题对每个人的主观性都是开放的

    在我看来,如果在一个测试类中多次使用一个代码块,那么应该在本地方法中提取该代码块

    如果在多个测试方法中使用它,那么应该研究继承或在测试包下创建一个小的util类

    如果主java代码中也需要该方法,那么就应该为其编写单元测试。测试的目的是验证运行时代码。JUnit代码在运行前运行

  3. # 3 楼答案

    我想说,测试代码和生产代码的规则类似:

    • 如果在一个类中多次使用代码模式,请将其提取到一个方法中
    • 如果在同一个包中的多个类中使用该方法,请将该方法移动到具有包级别可见性的实用程序类中
    • 如果在多个包中使用它,请将实用程序类移动到专用的实用程序包中,并将其公开
    • 如果在多个项目中使用代码,请将其移动到特定于团队的库中
    • 如果您发现整个组织反复需要此功能,请将其移至全局库
    • 如果你发现整个世界都需要它,那就开源吧

    基本上:让代码尽可能地可见,但不要更多

    是的,如果您将代码提取到一个实用程序类(第二个项目符号或以下),那么我希望为代码提供一个专用的测试/测试套件

  4. # 4 楼答案

    不,写“测试对测试”不是个好主意。我在很多公司工作,但我们都没有这样做。你写的东西已经够多了

  5. # 5 楼答案

    在测试类中使用helper方法是完全可以接受的。事实上,当测试任何大型复杂的事物时,很难不这样做。除非测试助手方法在多个项目中的多个测试中使用的实用工具类中(因此在不同项目的主jar中),所以通常不认为编写测试助手方法的测试是有用的。(否则,从逻辑上讲,几乎不可能有任何代码重用和经过充分测试的类)